//
//	MiscCircularSlider.m -- a cover for the MiscCircularSliderCell class
//		Written by Vince DeMarco and Don Yacktman
//		Copyright (c) 1994 by Vince DeMarco and Don Yacktman.
//				Version 1.0  All rights reserved.
//		This notice may not be removed from this source code.
//
//	This object is included in the MiscKit by permission from the author
//	and its use is governed by the MiscKit license, found in the file
//	"LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
//	for a list of all applicable permissions and restrictions.
//	

// This was created by modifying Vince's CircularSlider class and
// merging it with Don's RotationSlider class.  Here's the info
// from the original files.
/*
 *	Filename: CircularSlider.m
 *	Created : Sat 24 21:25:44 1991
 *	Author  : Vince DeMarco <vince@whatnxt.cuc.ab.ca>
 *	LastEditDate Was "Mon Sep  6 16:32:15 1993"
 *
 *    Version 2.0
 */
//	RotationSlider.m -- written by Don Yacktman
//	Copyright 1993 by Don Yacktman.  All rights reserved.

//	Modified by Laurent Daudelin <laurent@planon.qc.ca> to add
//  support for the lower and upper stop values and
//  the boundary flag.

#import "MiscCircularSlider.h"

static id MiscCircularSliderCellClass;

@implementation MiscCircularSlider

+ initialize
{
	if (self == [MiscCircularSlider class]) {
		MiscCircularSliderCellClass = [MiscCircularSliderCell class];
		// the default class
	}
    return self;
}

+ setCellClass:classId
{
    MiscCircularSliderCellClass = classId;
    return self;
}

- initFrame:(NXRect *)nf
{
    [super initFrame:nf];
    [[self setCell:[[MiscCircularSliderCellClass alloc] init]] free];
    return self;
}

- setBezeled:(BOOL)value
{
//    BOOL old = [cell isBezeled];
//	[cell setBezeled:value];
//   if (old != value) [self display];
	return self;
}

- (BOOL)isBezeled
{
    return [cell isBezeled];
}

- setBordered:(BOOL)value
{
//    BOOL old = [cell isBordered];
//   [cell setBordered:value];
//    if (old != value) [self display];
    return self;
}

- (BOOL)isBordered
{
    return [cell isBordered];
}

- setJumpToMousePoint:(BOOL)aBOOL
{
    [cell setJumpToMousePoint:aBOOL];
    return self;
}

- (BOOL)jumpToMousePoint
{
    return [cell jumpToMousePoint];
}

- setHidden:(BOOL)aBOOL
{
	BOOL old = [cell hidden];
	[cell setHidden:aBOOL];
	if (aBOOL != old) [self display];
	return self;
}

- (BOOL)hidden
{
    return (BOOL)[cell hidden];
}

- setUpperStopValue:(float)aValue
{
	float oldValue = [cell upperStopValue];
	[cell setUpperStopValue:aValue];
	if (aValue != oldValue) [self display];
	return self;
}

- (float)upperStopValue
{
	return [cell upperStopValue];
}

- setLowerStopValue:(float)aValue
{
	float oldValue = [cell lowerStopValue];
	[cell setLowerStopValue:aValue];
	if (aValue != oldValue) [self display];
	return self;
}

- (float)lowerStopValue
{
	return [cell lowerStopValue];
}

- setUseBoundaries:(BOOL)flag
{
	[cell setUseBoundaries:flag];
	return self;
}

- (BOOL)useBoundaries
{
	return [cell useBoundaries];
}

- setSliderStyle:(MiscCircularSliderStyle)style
{
    MiscCircularSliderStyle old = [cell sliderStyle];
	[cell setSliderStyle:style];
	if (style != old) [self display];
	return self;
}

- (MiscCircularSliderStyle)sliderStyle
{
    return (MiscCircularSliderStyle)[cell sliderStyle];
}

- setSliderPathWidth:(float)value
{
	[cell setSliderPathWidth:value];
	return self;
}

- (float)sliderPathWidth
{
    return [cell sliderPathWidth];
}

- setBorderType:(int)type
{
    int old = [cell sliderStyle];
	[cell setBorderType:type];
	if (type != old) [self display];
	return self;
}
- (int)borderType
{
	return [cell borderType];
}

- setBackgroundColor:(NXColor)aColor
{
	NXColor old = [cell backgroundColor];
	[cell setBackgroundColor:aColor];
	if (!NXEqualColor(old,aColor)) [self display];
	return self;
}
- (NXColor)backgroundColor
{
	return [cell backgroundColor];
}

- (float)startAngle
{
	return [cell startAngle];
}

- setStartAngle:(float)ang
{
	[cell setStartAngle:ang];
	[self display];
	return self;
}

- (BOOL)isClockwise
{
	return [cell isClockwise];
}

- setClockwise:(BOOL)clockwise
{
	[cell setClockwise:clockwise];
	[self display];
	return self;
}

@end


@implementation MiscCircularSlider(Compatability)

// Two covers to make sure we implement the methods that were used by Vince's
// CircularSlider.  This way, code that used that slider will still work as
// it did before with this new class dropped in instead.

- setDrawAsPieChart:(BOOL)aBOOL
{
    return [self setSliderStyle:
			(aBOOL ? MISC_PIECHART_STYLE : MISC_DIAL_STYLE)];
}

- (BOOL)drawAsPieChart
{
    return (BOOL)([self sliderStyle] == MISC_PIECHART_STYLE);
}

@end
